/****************************************************************
 **  Nombre: DAOAreaConcentracion.java                          *
 **  Version: 1.0.0                                             *
 **  Diagrama: GAPI v2.3.1                                      *
 **  Autor: Amado de Jesús Canté Cauich                         *
 **  Creado: 16-feb-2013 
 **  Caso de uso: MGOA1
 **  Modificado:                                                *
 ***************************************************************/
package DAO;

import AccesoBD.AccesoBaseDatos;
import Dominio.AreaConcentracion;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Clase que controla la tabla de area de concentracion del alumno en la base de datos.
 * 
 */
public class DAOAreaConcentracion {
    public static final String TABLA_AREA_CONCENTRACION = "area_concentracion";
    public static final String COLUMNA_NOMBRE = "nombre";
    public static final String COLUMNA_ID_AREA = "id_area";
    private AccesoBaseDatos acceso = new AccesoBaseDatos();
    private Connection conexion = null;
/**
 * Constructor que inicializa la conexion con la base de datos.
 */
    public DAOAreaConcentracion() {
        this.conexion = this.acceso.abrirConexion();
    }
    /**
     * Cierra la conexion a la base de datos.
     */
    public void cerrarConexionAAreaConcentracion() {
        acceso.cerrarConexion(conexion);
    }
    /**
     * Verifica si existe un area de concentracion en la base de datos.
     * @param area El objeto area de concentracion que se quiere buscar.
     * @return Verdadero si existe y falso si no exixtew en la base de datos.
     */
    public boolean existeAreaConcentracion(AreaConcentracion area){
        try{
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String consulta = "SELECT * FROM "+TABLA_AREA_CONCENTRACION+" WHERE "+COLUMNA_NOMBRE+" ='"
                    + area.getNombre().toUpperCase()+"'";
            ResultSet resultado = sentencia.executeQuery(consulta);
            System.out.println(resultado.getRow());
            int contadorDeRegistros = 0;
            while (resultado.next()) {
                contadorDeRegistros++;
            }

            if (contadorDeRegistros != 0) {
                return true;
            } else {
                return false;
            }
        }catch (SQLException ex) {
            Logger.getLogger(DAOAreaConcentracion.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }
    /**
     * Busca el area de concentracion en la base de datos.
     * @param nombre El nombre del area de concentracion.
     * @return Regresa el area de concentracion encontrada.
     */
    public AreaConcentracion buscaAreaConcentracion(String nombre){
        try{
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String consulta = "SELECT * FROM "+TABLA_AREA_CONCENTRACION+" WHERE "+COLUMNA_NOMBRE+" ='"
                    + nombre.toUpperCase()+"'";
            ResultSet resultado = sentencia.executeQuery(consulta);
                if(resultado.next()){
                    resultado.first();
                    String nombreBD = resultado.getObject(2).toString().toUpperCase();
                    int clave = resultado.getInt(1);
                    return new AreaConcentracion(clave,nombreBD);
                }else{
                    return null;
                }
        }catch(SQLException ex){
                System.out.println("Problemas de SQL:\n"+ex.toString());
        }
        return null;
    }
    /**
     * Registra un area de concentracion
     * @param area El area de concentracion a registrar.
     * @return El objeto registrado.
     */
    public AreaConcentracion registraAreaConcentracion(AreaConcentracion area){
        if(this.existeAreaConcentracion(area)){
            return this.buscaAreaConcentracion(area.getNombre().toUpperCase());
        }else{
            this.registrarAreaConcentracion(area);
            return this.buscaAreaConcentracion(area.getNombre().toUpperCase());
        }
    }
    /**
     * Registra el area de concentracion
     * @param area El area de concentracion.
     */
    private void registrarAreaConcentracion(AreaConcentracion area){
        if(!this.existeAreaConcentracion(area)){
            try{
                String nombre = area.getNombre().toUpperCase();
                String query = "INSERT INTO "+TABLA_AREA_CONCENTRACION+" ("+COLUMNA_NOMBRE+") VALUES ('"+nombre+"')";
                Statement sentencia = this.acceso.crearSentenciaBD(conexion);
                sentencia.executeUpdate(query);
            }catch(SQLException ex){
                System.out.println("Ocurrió un problema al intentar registrar el área de concentración\n");
                ex.printStackTrace();;
            }
        }else{
            System.out.println("Ya existe área de concentración que intenta registrar.");
        }
    }
    /**
     * Obtiene el area de concentracion mediante la clave que contiene.
     * @param claveArea La clave del area de concentracion.
     * @return El objeto de area de concentracion encontrado.
     */
    public AreaConcentracion obtenerArea(int claveArea){
        try{
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String query = "SELECT * FROM "+TABLA_AREA_CONCENTRACION+" WHERE "+COLUMNA_ID_AREA+"='"+claveArea+"';";
            ResultSet resultado = sentencia.executeQuery(query);
            if(resultado.next()){
                resultado.first();
                int clave = resultado.getInt(1);
                String nombre = resultado.getString(2);
                AreaConcentracion area = new AreaConcentracion(claveArea, nombre);
                return area;
            }
        }catch(SQLException ex){
                System.out.println("Ocurrió un problema al intentar obtener el área de concentración\n");
                ex.printStackTrace();;
            }
        return null;
    }
}
